#include <cstdio>
const int MAXN = 100000;
typedef struct node{
    int next;
}nod_t;
nod_t list[MAXN];
//标记第一个链表当中的地址，然后通过第二个链表的地址与之对比，即可找出公共后缀的起始节点
bool isexist[MAXN] = {false};
int main()
{
    int first1, first2;
    int N;
    scanf("%d%d%d", &first1, &first2, &N);
    int addr;
    int useless;
    for(int i = 0; i < N; ++i)
    {
        scanf("%d", &addr);
        getc(stdin);
        getc(stdin);
        getc(stdin);
        scanf("%d", &list[addr].next);
    }
    int tmnod = first1;
    while(tmnod != -1)
    {//标记第一个链表中的地址
        isexist[tmnod] = true;
        tmnod = list[tmnod].next;
    }
    tmnod  = first2;
    while(tmnod != -1)
    {
        if(isexist[tmnod])
        {//找到公共节点，退出循环
            break;
        }
        tmnod = list[tmnod].next;
    }
    if(-1 == tmnod)
    {//无公共结点
        printf("-1\n");
    }else{
        printf("%05d\n", tmnod);
    }
    return 0;
}